home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / raytrace / rayshade / graphtal.lzh / Graphtal.Amiga / Successor.C < prev    next >
C/C++ Source or Header  |  1992-11-19  |  2KB  |  65 lines

  1. /*
  2.  * Successor.C - methods for L-System successors.
  3.  *
  4.  * Copyright (C) 1992, Christoph Streit (streit@iam.unibe.ch)
  5.  *                     University of Berne, Switzerland
  6.  * All rights reserved.
  7.  *
  8.  * This software may be freely copied, modified, and redistributed
  9.  * provided that this copyright notice is preserved on all copies.
  10.  *
  11.  * You may not distribute this software, in whole or in part, as part of
  12.  * any commercial product without the express consent of the authors.
  13.  *
  14.  * There is no warranty or other guarantee of fitness of this software
  15.  * for any purpose.  It is provided solely "as is".
  16.  *
  17.  */
  18.  
  19. #include "Successor.h"
  20.  
  21. implementList(SuccessorList, SuccessorPtr);
  22.  
  23. //___________________________________________________________ Successor
  24.  
  25. Successor::Successor(double p, ProdModuleList* m)
  26. : modules(m), _probability(p)
  27. {}
  28.  
  29. Successor::~Successor()
  30. {
  31.   if (modules) {
  32.     for (long i=0; i<modules->count(); i++)
  33.       delete modules->item(i);
  34.     delete modules;
  35.   }
  36. }
  37.  
  38. // make a ModuleList out of the ProdModuleList of the successor
  39. ModuleList* Successor::clone()
  40. {
  41.   ModuleList* retval;
  42.   if (modules) {
  43.     retval = new ModuleList(modules->count());
  44.     for (register long i=0; i<modules->count(); i++)
  45.       retval->append(new Module(modules->item(i)));
  46.   }
  47.   else
  48.     retval = new ModuleList;
  49.  
  50.   return retval;
  51. }
  52.  
  53. ostream& operator<<(ostream& os, Successor& s)
  54. {
  55.   os << "-> (" << s.probability() << ") ";
  56.   if (s.modules)
  57.     for (long i=0; i<s.modules->count(); i++)
  58.       os << *s.modules->item(i) << " ";
  59.   else
  60.     os << "(empty)";
  61.  
  62.   return os;
  63. }
  64.  
  65.